Open Swift

等待許久,終於等到 Swift Open Source

Linux Version

可以先用上面的 dockerfile 快速建立一個有 swift 的 client。

Swift 安裝 (OSX) Swift Download

安裝 pkg 後,他會將 toolchain 安裝在 /Library/Developer/Toolchains/

1
2
3
ls /Library/Developer/Toolchains/
swift-2.2-SNAPSHOT-2015-12-01-a.xctoolchain
swift-latest.xctoolchain

然後關閉 XCode,執行 xcrun launch-with-toolchain /Library/Developer/Toolchains/swift-latest.xctoolchain

他會以 toolchain 的 swift 版本,開啟 XCode

最後,記得把 toolchain 加入到 PATH

1
export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"

測試安裝是否成功

1
swift build --help

如果沒有安裝成功的話會出現類似下面的字眼(要選 Development Snapshots,不是 Release Snapshots)

1
<unknown>:0: error: no such file or directory: 'build'

開始寫第一份 Package

專案結構如下。

1
2
3
4
5
tree
.
├── Package.swift
└── Sources
└── main.swift

大致上,package 內需要一個 Package.swift

Source Code 要放在 Sources 目錄,如果這個 Package 是執行的話,需要加入 main.swift(entry point)。

或者只是把它當成 Lib 的話,只要把你想要公開的功能設定成 public 就可以了(名稱就不用是 main.swift)。

寫下第一個 Hello Word!!

main.swift
1
print("Hello Yume")

Build then Run

1
2
3
4
5
6
7
yume:Swift22 yume$ pwd
/Users/yume/Desktop/Swift22
yume:Swift22 yume$ swift build
yume:Swift22 yume$ ls -a
. .. .build Package.swift Sources
yume:Swift22 yume$ .build/debug/Swift22
Hello Yume

Swift Packagae Manager

對岸翻譯

Source Layouts

swift package manager 的一些使用約束。

swift package manager 會因為你的 src layout。

進行 swift build 後,會有不同的輸出結果

1
2
3
example/
example/Sources/bar.swift
example/Sources/baz.swift

輸出:

example/.build/debug/example.a


1
2
example/Sources/foo/foo.swift
example/Sources/bar/bar.swift

輸出:

example/.build/debug/foo.a
example/.build/debug/bar.a


1
2
example/Sources/foo/main.swift
example/Sources/bar/bar.swift

輸出:

example/.build/debug/foo
example/.build/debug/bar.a


其他規則:

  • Tests 目錄會被忽略
  • Sources, Source, srcs, src 目錄下會變成模組(Module)
  • 可以接受沒有 Sources 目錄,此時它會將 根目錄(root directory) 視為單一模組(可以將code 放在根目錄或者其子目錄,simple 專案的寫法)。

Package.swift

Package.swift
1
2
3
4
5
6
7
8
9
import PackageDescription

let package = Package(
name: "DeckOfPlayingCards",
dependencies: [
.Package(url: "https://github.com/apple/example-package-fisheryates.git", majorVersion: 1),
.Package(url: "https://github.com/apple/example-package-playingcard.git", majorVersion: 1),
]
)

針對各個平台

針對各平台寫法link
1
2
3
4
5
6
7
#if     os(OSX)
import Cocoa
#elseif os(iOS)
import UIKit
#elseif os(Linux)
import Glibc
#endif

Using the LLDB Debugger Using the LLDB Debugger